# -*- coding: utf-8 -*-
# author: AZJ
# date: 2024/11/8

'''假如命运扼住了你的咽喉，你就去挠她的咯吱窝
给你一个整数数组 nums ，你可以对它进行一些操作。
每次操作中，选择任意一个 nums[i] ，删除它并获得 nums[i] 的点数。之后，你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。
开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。
示例 1：
输入：nums = [3,4,2]
输出：6
解释：
删除 4 获得 4 个点数，因此 3 也被删除。
之后，删除 2 获得 2 个点数。总共获得 6 个点数。
示例 2：

输入：nums = [2,2,3,3,3,4]
输出：9
解释：
删除 3 获得 3 个点数，接着要删除两个 2 和 4 。
之后，再次删除 3 获得 3 个点数，再次删除 3 获得 3 个点数。
总共获得 9 个点数。'''
class Solution(object):
    def deleteAndEarn(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        maxVal = max(nums)
        dp = [0] * (maxVal + 1)
        for val in nums:
            dp[val] += val
        # print(dp)
        def rob(nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            n = len(nums)
            dp = [0] * n
            dp[0], dp[1] = nums[0], max(nums[0], nums[1])
            print(nums,"\n",dp)
            for i in range(2, n):
                # print(f"{n}, {i}")
                dp[i] = max(dp[i-1], (dp[i-2] + nums[i]))
            # print(dp)
            return dp[n - 1]
        return rob(dp)

if __name__ == '__main__':
    s = Solution()
    print(s.deleteAndEarn([3,3,3,3,3,4,4,4,4,2,2]))